package com.mallcai.bigdata.ladon.datasource;

import com.mallcai.bigdata.ladon.dpl.entity.common.Datasource;
import com.mallcai.bigdata.ladon.service.system.IMailService;
import com.mallcai.bigdata.ladon.vo.*;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.ResultSetExtractor;

import java.util.List;

/**
 * Created by oneape<oneape15@163.com>
 * Created 2019-06-03 23:26.
 * Modify:
 */
public interface IDbHandler {

    /**
     * 获取数据源下的所有表信息
     *
     * @param ds Datasource
     * @return List
     */
    public List<TableVo> getAllTables(Datasource ds);

    /**
     * 获取表下面的所有字段信息
     *
     * @param ds        Datasource
     * @param tableName String
     * @return List
     */
    public List<ColumnVo> getColumns(Datasource ds, String tableName);

    /**
     * 执行sql语句
     *
     * @param ds         Datasource
     * @param queryParam QueryParam 查询条件
     * @return DataVo
     */
    public DataVo executeSql(Datasource ds, QueryParam queryParam);

    /**
     * 导出数据到用户邮箱
     *
     * @param ds           Datasource
     * @param params       ExportParam 导出条件
     * @param iMailService IMailService
     * @return int
     */
    public int exportData2Email(Datasource ds, ExportParam params, IMailService iMailService);

    /**
     * 执行sql语句
     */
    void execute(Datasource ds, QueryParam queryParam);

    /**
     * 执行sql语句
     * @param ds
     * @param batchUpdateParam
     * @return
     */
    <T> int[][] batchUpdate(Datasource ds, BatchUpdateParam<T> batchUpdateParam);

    <T> RunInfoResult<T> queryDataWithRunInfo(Datasource ds, String sql, PreparedStatementSetter preparedStatementSetter, ResultSetExtractor<T> resultSetExtractor);

}
